package com.cskaoyan.controller.wx.coupon;

import com.cskaoyan.bean.common.BaseRespVo;
import com.cskaoyan.bean.vo.wx.coupon.WxCouponExchangeCouponVo;
import com.cskaoyan.bean.vo.wx.coupon.WxCouponListVo;
import com.cskaoyan.bean.vo.wx.coupon.WxCouponListVo;
import com.cskaoyan.bean.vo.wx.coupon.WxCouponMylistCouponVo;
import com.cskaoyan.service.wx.coupon.WxCouponService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * @author MoJunXiang
 * @since 2022/09/11 19:56
 */
@RestController
@RequestMapping("wx/coupon")
public class WxCouponController {

    @Autowired
    WxCouponService wxCouponService;


    /**
     * @function_name list
     * @param page
     * @param limit
     * @idea 返回 **market_coupon表** 中所有数据
     * @return com.cskaoyan.bean.common.BaseRespVo<com.cskaoyan.bean.vo.wx.coupon.WxCouponListVo>
     * @author MoJunXiang
     * @since 2022/09/11 21:53
     */
    @RequestMapping("list")
    public BaseRespVo<WxCouponListVo> list(Integer page, Integer limit) {
        WxCouponListVo listVo = wxCouponService.list(page, limit);

        return BaseRespVo.ok(listVo);
    }


    /**
     * @function_name mylist
     * @param page
     * @param limit
     * @param status
     * @idea 从 **Shiro安全框架** 拿到当前登录对象的 *user_id* ，然后根据 *user_id* 从 **market_coupon_user表** 中获得一部分数据，再根据每条数据的 *coupon_id* 从 **market_coupon表** 中获得另一部分的数据。最后将所有数据返回。
     * @return com.cskaoyan.bean.common.BaseRespVo<com.cskaoyan.bean.vo.wx.coupon.WxCouponListVo>
     * @author MoJunXiang
     * @since 2022/09/11 23:44
     */
    @RequestMapping("mylist")
    public BaseRespVo<WxCouponListVo> mylist(Integer page, Integer limit, Integer status) {
        // 返回值
        WxCouponListVo listVo = wxCouponService.mylist(page, limit, status);

        return BaseRespVo.ok(listVo);
    }


    /**
     * @function_name selectlist
     * @param cartId
     * @param grouponRulesId
     * @idea 从 **Shiro安全框架** 获得当前登录用户的 *user_id* ，然后根据 *user_id* 和 *checked* 从 **market_cart表** 中获得所有 *goods_id*的集合 和 所有商品的 *price* 数据；再根据  *goods_id*的集合 从 **market_goods表** 中获得所有对应 *id* 的 *category_id* ，将其放入 *category_id*集合 里。
     *          根据 *user_id* 从 **market_coupon_user表** 中获得对应 *user_id* 的所有数据，包括 *coupon_id* 。再根据每条数据的 *coupon_id* 从 **market_coupon表** 中获得另一部分的数据。最后将所有数据返回。
     * @return com.cskaoyan.bean.common.BaseRespVo<com.cskaoyan.bean.vo.wx.coupon.WxCouponListVo>
     * @author MoJunXiang
     * @since 2022/09/11 20:51
     */
    @RequestMapping("selectlist")
    public BaseRespVo<WxCouponListVo> selectlist(Integer cartId, Integer grouponRulesId) {
        WxCouponListVo selectListVo = wxCouponService.selectlist(cartId, grouponRulesId);

        // 返回值
        return BaseRespVo.ok(selectListVo);
    }


    /**
     * @function_name receive
     * @param map
     * @idea 接收到传来的 *couponId* ，根据 **market_coupon表** 里对应 *id* 的数据，根据 *total* ， *limit* ， *goods_type* ， *goods_value* ， *time_type* ， *days* ， *start_time* ， *end_time* 进行一系列判断，将判断得来的数据和创建时的时间数据放入 *MarketCouponUser对象couponUser* 中，将其插入 **market_coupon_user表** 里。
     * @return com.cskaoyan.bean.common.BaseRespVo
     * @author MoJunXiang
     * @since 2022/09/12 19:59
     */
    @PostMapping("receive")
    public BaseRespVo receive(@RequestBody Map<String, Integer> map) {
        Integer couponId = map.get("couponId");
        int flag = wxCouponService.receive(couponId);

        /*TODO:
            看 "项目二 小程序-优惠券-receive接口 领取条件分析"组织结构图
            返回值：
                0 —— 领取成功ψ(｀∇´)ψ
                1 —— 来迟啦＞﹏＜优惠卷已领光
                2 —— 领太多啦（⊙ｏ⊙）！已经超过领取数量上限*/

        BaseRespVo vo = new BaseRespVo();
        // 0 —— 领取成功ψ(｀∇´)ψ
        if (flag == 0) {
            vo.setErrno(0);
            vo.setErrmsg("成功（￣︶￣）↗　");
            return vo;
        }
        // 1 —— 来迟啦＞﹏＜优惠卷已领光
        if (flag == 1) {
            vo.setErrno(1);
            vo.setErrmsg("来迟啦＞﹏＜优惠卷已领光");
            return vo;
        }

        // 2 —— 领太多啦（⊙ｏ⊙）！已经超过领取数量上限
        vo.setErrno(2);
        vo.setErrmsg("领多啦（⊙ｏ⊙）！已经超过领取数量上限");
        return vo;
    }


    /**
     * @function_name
     * @param map
     * @idea
     * @return com.cskaoyan.bean.common.BaseRespVo<com.cskaoyan.bean.vo.wx.coupon.WxCouponExchangeCouponVo>
     * @author MoJunXiang
     * @since 2022/09/12 20:26
     */
    @PostMapping("exchange")
    public BaseRespVo<WxCouponExchangeCouponVo> exchange(@RequestBody Map<String, String> map) {
        String code = map.get("code");
        HashMap<String, Object> voMap = wxCouponService.exchange(code);

        Integer resultCode = (Integer) voMap.get("resultCode");

        // 返回值
        BaseRespVo<WxCouponExchangeCouponVo> vo = new BaseRespVo<>();
        // 是            信息：领取成功（￣︶￣）↗    0
        if (resultCode == 0) {
            WxCouponExchangeCouponVo exchangeCouponVo = (WxCouponExchangeCouponVo) voMap.get("vo");
            vo.setData(exchangeCouponVo);
            vo.setErrno(0);
            vo.setErrmsg("成功（￣︶￣）↗");

        // 否    信息：优惠卷已领光＞﹏＜    1
        } else if (resultCode == 1) {
            vo.setErrno(1);
            vo.setErrmsg("领光了＞﹏＜");

        // 否     信息：已经领过了（⊙ｏ⊙）！      2
        } else if (resultCode == 2) {
            vo.setErrno(2);
            vo.setErrmsg("领过了（⊙ｏ⊙）！");

        // 信息：来迟啦，优惠卷已过期＞︿＜    3
        } else {
            vo.setErrno(3);
            vo.setErrmsg("已过期＞︿＜");
        }
        return vo;
    }

}
